#include "menu.h"

#include <stdlib.h>
#include <stdio.h>

// 初始化菜单
void MenuInit(STMenu *menu, size_t initialCapacity)
{
    menu->items = (STMenuItem *)malloc(initialCapacity * sizeof(STMenuItem));
    menu->itemCount = 0;
    menu->capacity = initialCapacity;
    menu->selectedIdx = 0;
}

// 添加菜单项
void MenuAddItem(STMenu *menu, STMenuItem item)
{
    // 如果空间不足，扩展容量
    if (menu->itemCount == menu->capacity) {
        menu->capacity *= 2;
        menu->items = (STMenuItem *)realloc(menu->items, menu->capacity * sizeof(STMenuItem));
    }

    // 添加菜单项
    menu->items[menu->itemCount] = item;
    menu->itemCount++;
}

// 删除菜单项（根据索引删除）
void MenuRemoveItem(STMenu *menu, size_t index)
{
    if (index >= menu->itemCount) {
        printf("Invalid index!\n");
        return;
    }

    // 释放字符串内存
    free(menu->items[index].str);

    // 移动剩余项
    for (size_t i = index; i < menu->itemCount - 1; i++) {
        menu->items[i] = menu->items[i + 1];
    }

    menu->itemCount--;
}

// 显示菜单
void MenuRender(const STMenu *menu)
{
    for (size_t i = 0; i < menu->itemCount; i++) {
        STMenuItem item = menu->items[i];
        if (i == menu->selectedIdx) {
            SetBgColor(VT_B_WHITE);
        } else {
            SetBgColor(VT_B_PURPLE);
        }
        DrawStrAtPos(item.rect.p.x, item.rect.p.y, item.str);
        // printf("Menu Item %zu: Position (%u, %u), Size (%u x %u), Text: %s\n",
        //        i + 1, item.rect.p.x, item.rect.p.y, item.rect.width, item.rect.height, item.str);
    }
}

// 清理菜单
void MenuDestroy(STMenu *menu)
{
    for (size_t i = 0; i < menu->itemCount; i++) {
        free(menu->items[i].str);
    }
    free(menu->items);
}
